using System;
using Sinacor.Servico.Bovespa.Titulo.Service.DataContract.Response;
using Sinacor.Servico.Bovespa.Titulo.BusinessEntity;
using System.ComponentModel;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Titulo.Service.ServiceImplementation.Translator
{
    /// <summary>
    /// Data: 08/01/2008
    /// Autor: Diogo Milanez
    /// Obs: Renomeado de TranslateBetweenTituloResponseAndTitulo para 
    /// TranslateTituloResponse
    /// </summary>
    public static class TranslateTituloResponse
    {
        
        /// <summary>
        /// Data:04/02/2008 12:05
        /// Autor:CPimentel
        /// Obs: ADICIONADO NOVO TRANSLATION DE DATACONTRACT PARA BUSINESSENTITY
        /// 
        /// Data : 07/02/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Alterado atributo DataPregao para aceitar nulo.
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public static BusinessEntity.Titulo ToTitulo(DataContract.Response.TituloResponse from)
		{
            BusinessEntity.Titulo to = new BusinessEntity.Titulo();
			to.Codigo = from.Codigo;
			to.Descricao = from.Descricao;
			//to.DiasLiquidacao = from.DiasLiquidacao; //excluido - sem uso - eduardo - 20080207
			to.Especificacao = from.Especificacao;
            //to.FatorValorizacao = from.FatorValorizacao; //excluido - sem uso - eduardo - 20080207
            //to.DiasLiquidacao = from.DiasLiquidacao; //excluido - sem uso - eduardo - 20080207
            //to.TituloObjetoOpcoes = from.TituloObjeto; //excluido - sem uso - eduardo - 20080207
            to.TipoMercado = (BusinessEntity.Enum.TipoMercado?) from.Mercado;
            //if (from.DataPregao != null) // Inserido Marcelo 06/02/2008 //excluido - eduardo - 20080207
            //    to.DataPregao = (DateTime)from.DataPregao; // Inserido Marcelo 06/02/2008 // excluido - eduardo - 20080207
            to.DataPregao = from.DataPregao; // Inserido Marcelo //alterado para aceitar nulo - eduardo - 20080207
			return to;
		}
		
		/// <summary>
        /// Data: 08/01/2008
        /// Autor: Diogo Milanez
        /// Obs: Renomeado de TranslateTituloToTituloResponse para ToTituloResponse
        /// 
        /// Data : 10/01/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Incluido DataVencimentoTermo, FatorCotacao e CotacaoTitulo.
        /// 
        /// Data : 07/02/2008
        /// Autor: Eduardo Sertorio
        /// Obs. : Alterado DataContract de Especie para Especificacao.
        /// Obs. : Incluido DataPregao.
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public static DataContract.Response.TituloResponse ToTituloResponse(BusinessEntity.Titulo from)
        {
            if (from == null)
                return null;

            DataContract.Response.TituloResponse to = new DataContract.Response.TituloResponse();
            to.Codigo = from.Codigo;
            to.CotacaoMediaTitulo = from.CotacaoMediaTitulo;
            to.Descricao = from.Descricao;
            to.Isin = from.CodigoISIN;
            to.Distribuicao = from.NumeroDistribuicao;
            to.Empresa = from.NomeSA;
            to.Especificacao = from.Especificacao; //alterado DataContract de Especie para Especificacao - eduardo - 20080206
            to.PrecoExercido = from.PrecoExercicio;

            if (from.TipoMercado.HasValue)
            {
                switch (from.TipoMercado.Value)
                {
                    case BusinessEntity.Enum.TipoMercado.Vista:
                        to.Mercado = DataContract.Enum.TipoMercado.Vista;
                        break;
                    case BusinessEntity.Enum.TipoMercado.OpcaoCompra:
                        to.Mercado = DataContract.Enum.TipoMercado.OpcaoCompra;
                        break;
                    case BusinessEntity.Enum.TipoMercado.OpcaoVenda:
                        to.Mercado = DataContract.Enum.TipoMercado.OpcaoVenda;
                        break;
                    case BusinessEntity.Enum.TipoMercado.ExercicioOpcaoCompra:
                        to.Mercado = DataContract.Enum.TipoMercado.ExercicioOpcaoCompra;
                        break;
                    case BusinessEntity.Enum.TipoMercado.ExercicioOpcaoVenda:
                        to.Mercado = DataContract.Enum.TipoMercado.ExercicioOpcaoVenda;
                        break;
                    case BusinessEntity.Enum.TipoMercado.Fracionario:
                        to.Mercado = DataContract.Enum.TipoMercado.Fracionario;
                        break;
                    case BusinessEntity.Enum.TipoMercado.Estruturado:
                        to.Mercado = DataContract.Enum.TipoMercado.Estruturado;
                        break;
                    case BusinessEntity.Enum.TipoMercado.Leilao:
                        to.Mercado = DataContract.Enum.TipoMercado.Leilao;
                        break;
                    case BusinessEntity.Enum.TipoMercado.Termo:
                        to.Mercado = DataContract.Enum.TipoMercado.Termo;
                        break;
                    case BusinessEntity.Enum.TipoMercado.LeilaoNaoCotados:
                        to.Mercado = DataContract.Enum.TipoMercado.LeilaoNaoCotados;
                        break;
                    case BusinessEntity.Enum.TipoMercado.Futuro:
                        to.Mercado = DataContract.Enum.TipoMercado.Futuro;
                        break;
                    case BusinessEntity.Enum.TipoMercado.VencimentoFuturo:
                        to.Mercado = DataContract.Enum.TipoMercado.VencimentoFuturo;
                        break;
                    case BusinessEntity.Enum.TipoMercado.BOX:
                        to.Mercado = DataContract.Enum.TipoMercado.BOX;
                        break;
                    case BusinessEntity.Enum.TipoMercado.IntegralizacaoResgateCotas:
                        to.Mercado = DataContract.Enum.TipoMercado.IntegralizacaoResgateCotas;
                        break;
                    case BusinessEntity.Enum.TipoMercado.CotasETF:
                        to.Mercado = DataContract.Enum.TipoMercado.CotasETF;
                        break;
                    case BusinessEntity.Enum.TipoMercado.OpcaoVendaCompra:
                        to.Mercado = DataContract.Enum.TipoMercado.OpcaoVendaCompra;
                        break;
                }
            }

            to.DataVencimentoTermo = from.DataVencimentoTermo; //incluido - eduardo - 20080110
            to.FatorCotacao = from.FatorCotacao; //20080412 14:48 - Alterado - DMilanez.7Comm
            to.CotacaoTitulo = from.CotacaoTitulo; //incluido - eduardo - 20080110
            to.DataPregao = from.DataPregao; //incluido - eduardo - 20080207

            to.NumeroDiasLiquidacao = from.NumeroDiasLiquidacao; // 25/02/2008 - incluido - Dmilanez
            to.DataInicioNegociacao = from.DataInicioNegociacao; // 25/02/2008 - incluido - Dmilanez

            to.TituloObjetoOpcoes = from.TituloObjetoOpcoes;//20080413 12:12 - Alterado - DMilanez.7Comm
            return to;
        }

        public static List<DataContract.Response.TituloResponse>
          TranslateTituloCollectionTituloResponseCollection(List<BusinessEntity.Titulo> from)
        {
            List<DataContract.Response.TituloResponse> to = null;

            if (from != null)
            {
                to = new List<DataContract.Response.TituloResponse>();
                foreach (BusinessEntity.Titulo listaTitulo in from)
                {
                    to.Add(TranslateTituloResponse.
                        ToTituloResponse(listaTitulo));
                }
            }

            return to;
        }
    }
}

